
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.Timestamp;
import java.util.ArrayList;


public class DBManager {		
	
	public static void main(String[] args) throws IOException {
		DBManager.getAllUsuarios();
		System.out.println("---");
		DBManager.getAllConductores();
		System.out.println("---");
		DBManager.getAllPasajeros();
		System.out.println("---***---");
		System.out.print("PasajerosCercanos:");
		DBManager.getPasajerosCercanos(Float.parseFloat("-35.403638"),Float.parseFloat("-71.65756"),Float.parseFloat("-35.107973"),Float.parseFloat("-71.298194"));
		System.out.println("---");
		System.out.print("ConductoresCercanos:");
		DBManager.getConductoresCercanos(Float.parseFloat("-35.1738"),Float.parseFloat("-71.3626"),Float.parseFloat("-35.4114"),Float.parseFloat("-71.6531"));
		System.out.println("---");				
		//DBManager.getUsuarios(5646546);
		
		//DBManager.setConductor(5646546, 1, 5);
		//DBManager.setPasajero(56465467, 1);
		
	}
	
	
	
	
	public static ArrayList<Usuario> _get(String url) throws IOException{
		ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
		URL url_ws = new URL(url);
		BufferedReader in = new BufferedReader(new InputStreamReader(url_ws.openStream()));		
		String inputLine = "";		
		while ((inputLine = in.readLine()) != null){
			String user[] = inputLine.split(",");
			Usuario u = new Usuario(user[1].replace("nombre:", ""),user[2].replace("ip:", ""),Integer.parseInt(user[3].replace("puerto:", "")),user[4].replace("dispositivo:", ""));//String nombre, String ip, int puerto,String dispositivo
			u.setTelefono(Integer.parseInt(user[0].replace("telefono:", "")));
			if(user[5].replace("rol:", "").equals("conductor")){
				u.setRol(Usuario.Rol.conductor);
			}else{
				u.setRol(Usuario.Rol.pasajero);
			}
			u.setLat_ini(Float.parseFloat(user[6].replace("lat_ini:", "")));
			u.setLon_ini(Float.parseFloat(user[7].replace("lon_ini:", "")));
			u.setLat_fin(Float.parseFloat(user[8].replace("lat_fin:", "")));
			u.setLon_fin(Float.parseFloat(user[9].replace("lon_fin:", "")));
			u.setFecha_hora(Timestamp.valueOf(user[10].replace("fecha_hora:", "")));
			u.setNum_asiento(Integer.parseInt(user[11].replace("num_asientos:", "")));
			u.setEstado(Integer.parseInt(user[12].replace("estado:", "").trim()));
			usuarios.add(u);
		}
		in.close();		
		return usuarios;
	}
	
	public static Usuario getUsuario(int telefono) throws IOException{
		Usuario u = DBManager._get("http://localhost:4567/get_usuario/"+telefono).get(0);	
		if(u.getRol().toString().equals("conductor")){
			DBManager.setConductor(u.getTelefono(), 1, 3);
		}else{
			DBManager.setPasajero(u.getTelefono(), 1);
		}
		return u;
	}
	
	
	public static ArrayList<Usuario> getAllUsuarios() throws IOException{
		return DBManager._get("http://localhost:4567/get_all_usuarios");	
	}
	
	public static ArrayList<Usuario> getAllConductores() throws IOException{
		return DBManager._get("http://localhost:4567/get_all_conductores");		
	}
	
	public static ArrayList<Usuario> getAllPasajeros() throws IOException{
		return DBManager._get("http://localhost:4567/get_all_pasajeros");	
	}
	
	public static ArrayList<Usuario> getPasajerosCercanos(float lat_ini, float lon_ini, float lat_fin, float lon_fin) throws IOException{
		return DBManager._get("http://localhost:4567/get_pasajeros_cercanos?lat_ini="+lat_ini+"&lon_ini="+lon_ini+"&lat_fin="+lat_fin+"&lon_fin="+lon_fin);	
	}
	
	public static ArrayList<Usuario> getConductoresCercanos(float lat_ini, float lon_ini, float lat_fin, float lon_fin) throws IOException{
		return DBManager._get("http://localhost:4567/get_conductores_cercanos?lat_ini="+lat_ini+"&lon_ini="+lon_ini+"&lat_fin="+lat_fin+"&lon_fin="+lon_fin);				
	}
		
	public static void setConductor(int numTelefono, int estado, int numAsientos) throws IOException{
		URL url_ws = new URL("http://localhost:4567/set_conductor_estado/"+numTelefono+"/"+estado+"/"+numAsientos);
		url_ws.openStream();	
	}
	
	public static void setPasajero(int numTelefono, int estado) throws IOException{
		URL url_ws = new URL("http://localhost:4567/set_pasajero_estado/"+numTelefono+"/"+estado);
		url_ws.openStream();	
	}
	
}
